import axios from 'axios'
import { ElMessage } from "element-plus";
import router from "../router/router"

let config = {
    timeout:10000,
};

const _axios = axios.create(config);
_axios.interceptors.request.use(
    function(config) {
        // Do something before request is sent
        if (localStorage.getItem('token')) {
            config.headers.Authorization = "Bearer "+localStorage.getItem('token');
        }
      return config;
    },
    function(error) {
      // Do something with request error
      return Promise.reject(error);
    }
);

// Add a response interceptor
_axios.interceptors.response.use(
    function(response) {
        let code = response.data.code;
        if (code == '401') {
            //现在跳转去登录
            router.push({ path: '/login' });
        }
      return response;
    },
    function(error) {
      // Do something with response error
        if (error.response.status) {
            //alert(error.response.status);
            switch (error.response.status) {
                // 401: 未登录
                // 未登录则跳转登录页面，并携带当前页面的路径
                // 在登录成功后返回当前页面，这一步需要在登录页操作。
                case 401:
                    router.push({ path: '/login' });
                    break;
                // 403 token过期
                // 登录过期对用户进行提示
                // 清除本地token和清空vuex中token对象
                // 跳转登录页面
                case 403:
                    ElMessage.error("登录过期，请重新登录");
                    // 清除token
                    localStorage.removeItem('token')
                    // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
                    setTimeout(() => {
                        router.push({ path: '/login' });
                    }, 1000)
                    break;
                // 404请求不存在
                case 404:
                    ElMessage.error("网络请求不存在,404错误");
                    break;
                // 500服务端错误
                case 500:
                    ElMessage.error("服务端有故障,500错误");
                    break;
                // 其他错误，直接抛出错误提示
                default:
                    //alert("default:"+error.response.data.message);
                    var tip = "";
                    if (typeof(error.response.data.message) == "undefined") {
                        //alert(error);
                        tip = error.toString();
                    } else {
                        tip = error.response.data.message;
                    }
                    ElMessage.error(tip);
                    break;
            }
            return Promise.reject(error.response)
        }
    }
);

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get (url, params) {
  return new Promise((resolve, reject) => {
    _axios.get(url, {
      params: params,
    }).then(res => {
      resolve(res.data)
    }).catch(err => {
      reject(err.data)
    })
  })
}
//post
export function postForm (url, params) {
  //axios.defaults.headers.post['Content-Type'] = 'multipart/form-data';
  return new Promise((resolve, reject) => {
    _axios.post(url, params,{headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    }})
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
            console.log("api error:");
            console.log(err);
            //alert(err);
          reject(err.data)
        })
  })
}

//用json格式post提交
export function postJson (url, params) {
  return new Promise((resolve, reject) => {
    _axios.post(url, JSON.stringify(params))
      .then(res => {
        resolve(res.data)
      })
      .catch(err => {
        reject(err.data)
      })
  })
}
